package com.hq.stream;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;

/**
 * Consumer的意思就是消费，即针对某个东西我们来使用它，因此它包含有一个有输入而无输出的accept接口方法；
 * 除accept方法，它还包含有andThen这个方法；
 * default Consumer<T> andThen(Consumer<? super T> after) {
 *     Objects.requireNonNull(after);
 *     return (T t) -> { accept(t); after.accept(t); };
 * }
 * @author hq
 */
public class ConsumerTest {
    static List<String> testDate = new ArrayList<>();
    static {
        testDate.add("第一条数据");
        testDate.add("第二条数据");
        testDate.add("第三条数据");
        testDate.add("第四条数据");
    }

    @Test
    public void acceptTest(){
        Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println("Consumer的accept测试:"+s);
            }
            @Override
            public Consumer<String> andThen(Consumer<? super String> after) {
                return (String t) -> { accept("先调用了我"+t); after.accept("在调用我"+t); };
            }
        };
        //结果： Consumer的accept测试:第一条数据 Consumer的accept测试:第二条数据 。。。
        testDate.stream().forEach(consumer);
        //结果： 原生Consumer结果：第一条数据 原生Consumer结果：第二条数据 。。。
        testDate.stream().forEach((b) -> System.out.println("原生Consumer结果："+b));


        System.out.println("=================");

        Consumer a = (b) -> System.out.println("新的Consumer"+b);
        //先调用consumer的accept 在调用 a的accept
        // 相当于 consumer.accept("ce")   a.accept("ce")
        consumer.andThen(a).accept("ce");
    }



}
